减少着色器切换

每当渲染批次与上一批相比有不同的着色器时,Kanzi 就必须切换渲染器。由于材质可以具有自己的顶点着色器和片段着色器,因此在某些情况下,您的应用程序在渲染场景时必须多次切换着色器。

在 OpenGL 中,会将顶点着色器和片段着色器分别编译到着色器程序中,并在需要使用它们时将它们发送到 GPU 中。GPU 每次只存储一个程序。对于场景中的每个材质,必须进行至少一次着色器切换。如果对象的显示顺序需要在着色器程序之间进行频繁切换,渲染速度可能会下降。

您可以在 Kanzi Studio 预览 (Preview) 性能 HUD (Performance HUD) 中查看渲染器切换数量,也可以通过调用 getShaderSwitchCount()Kanzi Engine API 中查看。请参阅排除应用程序的性能问题

着色器切换操作会降低应用程序的性能,因此请尽量减少着色器切换次数。要减少着色器切换:

按材质类型渲染节点

要按材质类型渲染节点:

  1. 素材库 (Library) 中,按下 Alt 并右键点击 渲染 (Rendering) > 对象源 (Object Source),然后选择排序过滤器 (Sorting Filter)
  2. 属性 (Properties) 中设置:
  3. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) 中,创建组渲染通道 (Group Render Pass),然后在其中创建:
  4. 素材库 (Library) 中选择您创建的绘图对象渲染通道 (Draw Objects Render Pass),并在属性 (Properties) 中将对象源 (Object Source) 属性设置为您创建的过滤器或设置为收集过滤器的对象资源。
  5. 工程 (Project) 中,选择您要应用过滤器的场景 (Scene) 节点,然后在属性 (Properties) 中将渲染通道 (Render Pass) 属性设为组渲染通道 (Group Render Pass),其子绘图对象渲染通道 (Draw Objects Render Pass) 用作您创建的过滤器的对象源。

    Kanzi Studio 渲染过滤器收集的节点。

另请参阅

使用二进制着色器

优化片段着色器

并行加载资源

着色器最佳实践

排除应用程序的性能问题

最佳实践